package cloud.seri.iot.common.api

import cloud.seri.iot.common.model.BatchAddDeviceGroupRelationsDTO
import cloud.seri.iot.common.model.CreateDeviceGroupDTO
import cloud.seri.iot.common.model.QueryDeviceGroupListDTO
import com.aliyuncs.iot.model.v20180120.*


interface GroupManager
{
    /**
     * 新建分组。
     *
     * @param SuperGroupId 父组ID
     * @param GroupName    分组名称            必须
     * @param GroupDesc    分组描述
     * @Des 描述：
     */
    fun createDeviceGroup(dto: CreateDeviceGroupDTO): CreateDeviceGroupResponse?

    /**
     * 修改分组信息。
     *
     * @param GroupId 分组ID 必须
     * @param GroupDesc    分组描述
     * @Des 描述：
     */
    fun updateDeviceGroup(GroupId: String, GroupDesc: String?): UpdateDeviceGroupResponse?

    /**
     * 删除指定分组。
     *
     * @param GroupId 分组ID 必须
     * @Des 描述：
     */
    fun deleteDeviceGroup(GroupId: String): DeleteDeviceGroupResponse?


    /**
     * 添加设备到某一分组（可批量添加设备）。
     *
     * @param GroupId 分组ID 必须
     * @param Devices 要添加到分组的设备信息 列表
     * @Des 描述：
     */
    fun batchAddDeviceGroupRelations(dto: BatchAddDeviceGroupRelationsDTO): BatchAddDeviceGroupRelationsResponse?

    /**
     * 查询分组列表
     *
     * @param GroupName 分组名称    传入分组名称，则根据名称进行精确查询。若不传入此参数，则进行全量分组查询。
     * @param SuperGroupId 父组ID
     * @param PageSize 每页记录数。最大值是200。  必须
     * @param CurrentPage                      必须
     *
     * @Des 描述：
     */
    fun queryDeviceGroupList(dto: QueryDeviceGroupListDTO): QueryDeviceGroupListResponse?


    /**
     * 添加、更新、或删除分组标签
     *
     * @param GroupId 分组ID 必须
     * @param TagString JSON格式的标签数据 必须
     *
     * @Des 描述：
     */
    fun setDeviceGroupTags(GroupId: String, TagString: String): SetDeviceGroupTagsResponse?


    /**
     * 查询分组标签列表
     *
     * @param GroupId 分组ID 必须
     *
     * @Des 描述：
     */
    fun queryDeviceGroupTagList(GroupId: String): QueryDeviceGroupTagListResponse?


    /**
     * 某一设备所在的分组列表
     *
     * @param ProductKey  产品Key
     * @param DeviceName  设备名称
     * @Des 描述：
     */
    fun queryDeviceGroupByDevice(ProductKey: String, DeviceName: String): QueryDeviceGroupByDeviceResponse?


    /**
     * 查询分组中的设备列表
     *
     * @param GroupId  分组id  必须
     * @param CurrentPage
     * @param PageSize
     * @Des 描述：
     */
    fun queryDeviceListByDeviceGroup(GroupId: String, CurrentPage: Int?, PageSize: Int?): QueryDeviceListByDeviceGroupResponse?

    /**
     * 根据子分组ID查询父分组信息
     *
     * @param GroupId  分组id  必须
     * @Des 描述：
     */
    fun querySuperDeviceGroup(GroupId: String): QuerySuperDeviceGroupResponse?
}
